home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 1
/
Nebula One.iso
/
Internet
/
WWW
/
swish.11
/
src
/
swish.h
< prev
Wrap
C/C++ Source or Header
|
1995-03-13
|
11KB
|
286 lines
/*
** Copyright (C) 1995, Enterprise Integration Technologies Corp.
** All Rights Reserved.
** Kevin Hughes, kevinh@eit.com
** 3/11/94
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef NEXTSTEP
#include <sys/dir.h>
#else
#include <dirent.h>
#endif
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#include <setjmp.h>
#define VERSION "1.1.1"
#define INDEXFILE "index.swish"
#define INDEXHEADER "# SWISH format 1.1"
#define MAXFILELEN 1000
#define MAXSTRLEN 1000
#define MAXWORDLEN 1000
#define MAXTITLELEN 200
#define MAXSUFFIXLEN 10
#define MAXENTLEN 10
#define HASHSIZE 101
#define BIGHASHSIZE 1009
#define TI_OPEN 1
#define TI_CLOSE 2
#define TI_FOUND 4
#define NOWORD "thisisnotaword"
#define SECSPERMIN 60
#define NO_RULE 0
#define AND_RULE 1
#define OR_RULE 2
#define NOT_RULE 3
#define IN_FILE 1
#define IN_TITLE 2
#define IN_HEAD 4
#define IN_BODY 8
#define IN_COMMENTS 16
#define IN_HEADER 32
#define IN_EMPHASIZED 64
#define IN_ALL 127
#define MAXLONGLEN 16
#define MAXCHARS 68
#define MAXHEADCHARS MAXLONGLEN * MAXCHARS
#define STOPWORDPOS MAXCHARS - 3
#define FILELISTPOS MAXCHARS - 2
#define FILEOFFSETPOS MAXCHARS - 1
#include "config.h"
struct sortresult {
char *fileinfo;
int rank;
struct sortresult *left;
struct sortresult *right;
};
struct result {
int filenum;
int rank;
int structure;
struct result *next;
};
struct file {
char *filename;
char *title;
int size;
struct file *next;
};
struct filenum {
int fileshort;
long filelong;
struct filenum *next;
};
struct location {
int filenum;
int frequency;
int emphasized;
int structure;
struct location *next;
};
struct entry {
char *word;
int tfrequency;
struct location *locationlist;
struct entry *left;
struct entry *right;
};
struct sortentry {
char *filename;
char *title;
struct sortentry *left;
struct sortentry *right;
};
struct swline {
char *line;
struct swline *next;
};
struct fwordtotal {
int filenum;
int totalwords;
struct fwordtotal *next;
};
#ifndef MAIN_FILE
#define VAR extern
#else
#define VAR
#endif
VAR struct file *filelist;
VAR struct entry *entrylist;
VAR struct swline *pathconlist;
VAR struct swline *dirconlist;
VAR struct swline *fileconlist;
VAR struct swline *titconlist;
VAR struct swline *fileislist;
VAR struct swline *suffixlist;
VAR struct swline *nocontentslist;
VAR struct swline *replacelist;
VAR struct swline *searchwordlist;
VAR struct swline *dirlist;
VAR struct swline *indexlist;
VAR struct swline *hashstoplist[HASHSIZE];
VAR struct result *resulthashlist[HASHSIZE];
VAR struct fwordtotal *fwordtotals[BIGHASHSIZE];
VAR struct filenum *filehashlist[BIGHASHSIZE];
VAR long offsets[MAXCHARS];
VAR int verbose;
VAR int bigrank;
VAR int maxhits;
VAR int totalwords;
VAR int followsymlinks;
VAR int commonerror;
VAR char indexn[MAXSTRLEN];
VAR char indexd[MAXSTRLEN];
VAR char indexp[MAXSTRLEN];
VAR char indexa[MAXSTRLEN];
VAR char errorstr[MAXSTRLEN];
#ifdef MAIN_FILE
char *indexchars = "abcdefghijklmnopqrstuvwxyz&#;0123456789_\\|/-+=?!@$%^'\"`~,.<>[]{}";
char *defaultstopwords[] = {
"a", "about", "above", "according", "across", "actually", "adj", "after",
"afterwards", "again", "against", "all", "almost", "alone", "along",
"already", "also", "although", "always", "among", "amongst", "an", "and",
"another", "any", "anyhow", "anyone", "anything", "anywhere", "are", "aren",
"aren't", "around", "as", "at", "be", "became", "because", "become", "becomes",
"becoming", "been", "before", "beforehand", "begin", "beginning", "behind",
"being", "below", "beside", "besides", "between", "beyond", "billion", "both",
"but", "by", "can", "can't", "cannot", "caption", "co", "could", "couldn",
"couldn't", "did", "didn", "didn't", "do", "does", "doesn", "doesn't", "don",
"don't", "down", "during", "each", "eg", "eight", "eighty", "either", "else",
"elsewhere", "end", "ending", "enough", "etc", "even", "ever", "every",
"everyone", "everything", "everywhere", "except", "few", "fifty", "first",
"five", "for", "former", "formerly", "forty", "found", "four", "from",
"further", "had", "has", "hasn", "hasn't", "have", "haven", "haven't",
"he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon",
"hers", "herself", "him", "himself", "his", "how", "however", "hundred",
"ie", "i.e.", "if", "in", "inc", "inc.", "indeed", "instead", "into", "is",
"isn", "isn't", "it", "its", "itself", "last", "later", "latter", "latterly",
"least", "less", "let", "like", "likely", "ll", "ltd", "made", "make",
"makes", "many", "maybe", "me", "meantime", "meanwhile", "might", "million",
"miss", "more", "moreover", "most", "mostly", "mr", "mrs", "much", "must",
"my", "myself", "namely", "neither", "never", "nevertheless", "next", "nine",
"ninety", "no", "nobody", "none", "nonetheless", "noone", "nor", "not",
"nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one",
"only", "onto", "or", "other", "others", "otherwise", "our", "ours",
"ourselves", "out", "over", "overall", "own", "per", "perhaps", "rather",
"re", "recent", "recently", "same", "seem", "seemed", "seeming", "seems",
"seven", "seventy", "several", "she", "should", "shouldn", "shouldn't",
"since", "six", "sixty", "so", "some", "somehow", "someone", "something",
"sometime", "sometimes", "somewhere", "still", "stop", "such", "taking",
"ten", "than", "that", "the", "their", "them", "themselves", "then",
"thence", "there", "thereafter", "thereby", "therefore", "therein",
"thereupon", "these", "they", "thirty", "this", "those", "though",
"thousand", "three", "through", "throughout", "thru", "thus", "to",
"together", "too", "toward", "towards", "trillion", "twenty", "two", "under",
"unless", "unlike", "unlikely", "until", "up", "upon", "us", "used", "using",
"ve", "very", "via", "was", "wasn", "we", "we", "well", "were", "weren",
"weren't", "what", "whatever", "when", "whence", "whenever", "where",
"whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever",
"whether", "which", "while", "whither", "who", "whoever", "whole", "whom",
"whomever", "whose", "why", "will", "with", "within", "without", "won",
"would", "wouldn", "wouldn't", "yes", "yet", "you", "your", "yours",
"yourself", "yourselves", NULL };
char *entities[] = {
"", " ", " ", "", "!", "!", """, """, "\"", "", "#", "#",
"", "$", "$", "", "%", "%", "&", "&", "&", "", "'", "'",
"", "+", "+", "", ",", ",", "", "-", "-", "", ".", ".",
"", "/", "/", "", "0", "0", "", "1", "1", "", "2", "2",
"", "3", "3", "", "4", "4", "", "5", "5", "", "6", "6",
"", "7", "7", "", "8", "8", "", "9", "9", "", ":", "",
"", ";", ";", "<", "<", "<", "", "=", "=", ">", ">", ">",
"", "?", "?", "", "@", "@", "", "A", "A", "", "B", "B",
"", "C", "C", "", "D", "D", "", "E", "E", "", "F", "F",
"", "G", "G", "", "H", "H", "", "I", "I", "", "J", "J",
"", "K", "K", "", "L", "L", "", "M", "M", "", "N", "N",
"", "O", "O", "", "P", "P", "", "Q", "Q", "", "R", "R",
"", "S", "S", "", "T", "T", "", "U", "U", "", "V", "V",
"", "W", "W", "", "X", "X", "", "Y", "Y", "", "Z", "Z",
"", "[", "[", "", "\", "\\", "", "]", "]", "", "^", "^",
"", "_", "-", "", "`", "`", "", "a", "a", "", "b", "b",
"", "c", "c", "", "d", "d", "", "e", "e", "", "f", "f",
"", "g", "g", "", "h", "h", "", "i", "i", "", "j", "j",
"", "k", "k", "", "l", "l", "", "m", "m", "", "n", "n",
"", "o", "o", "", "p", "p", "", "q", "q", "", "r", "r",
"", "s", "s", "", "t", "t", "", "u", "u", "", "v", "v",
"", "w", "w", "", "x", "x", "", "y", "y", "", "z", "z",
"", "{", "{", "", "|", "|", "", "}", "}", "", "~", "~",
" ", " ", " ", "¡", "¡", "", "¢", "¢", "",
"£", "£", "", "¤", "¤", "", "¥", "¥", "",
"¦", "¦", "", "§", "§", "", "&die", "¨", "",
"©", "©", "", "ª", "ª", "", "«", "«", "",
"¬", "¬", "", "", "", "", "®", "®", "",
"¯on", "¯", "", "°ree", "°", "", "±", "±", "",
"²", "²", "", "³", "³", "", "´", "´", "",
"µ", "µ", "", "&mu", "¶", "", "·", "·", "",
"&Cedilla", "¸", "", "¹", "¹", "", "º", "º", "",
"»", "»", "", "¼", "¼", "", "½", "½", "",
"¾", "¾", "", "¿", "¿", "", "À", "À", "A",
"Á", "Á", "A", "Â", "Â", "A", "Ã", "Ã", "A",
"Ä", "Ä", "A", "Å", "Å", "A", "Æ", "Æ", "A",
"Ç", "Ç", "C", "È", "È", "E", "É", "É", "E",
"Ê", "Ê", "E", "Ë", "Ë", "E", "Ì", "Ì", "E",
"Í", "Í", "I", "Î", "Î", "I", "Ï", "Ï", "I",
"Ð", "Ð", "", "Ñ", "Ñ", "N", "Ò", "Ò", "O",
"Ó", "Ó", "O", "Ô", "Ô", "O", "Õ", "Õ", "O",
"Ö", "Ö", "O", "×", "×", "", "Ø", "Ø", "O",
"Ù", "Ù", "U", "Ú", "Ú", "U", "Û", "Û", "U",
"Ü", "Ü", "U", "Ý", "Ý", "Y", "Þ", "Þ", "",
"ß", "ß", "", "à", "à", "a", "á", "á", "a",
"â", "â", "a", "ã", "ã", "a", "ä", "ä", "a",
"å", "å", "a", "æ", "æ", "a", "ç", "ç", "c",
"è", "è", "e", "é", "é", "e", "ê", "ê", "e",
"ë", "ë", "e", "ì", "ì", "i", "í", "í", "i",
"î", "î", "i", "ï", "ï", "i", "ð", "ð", "",
"ñ", "ñ", "n", "ò", "ò", "o", "ó", "ó", "o",
"ô", "ô", "o", "õ", "õ", "o", "ö", "ö", "o",
"÷", "÷", "", "ø", "ø", "o", "ù", "ù", "u",
"ú", "ú", "u", "û", "û", "u", "ü", "ü", "u",
"ý", "ý", "y", "þ", "þ", "", "ÿ", "ÿ", "y",
NULL };
#else
extern char *indexchars;
extern char *defaultstopwords[];
extern char *entities[];
#endif
#ifdef MAIN_FILE
int main();
void usage();
void printversion();
void printrunning();
long getthetime();
#endif